package com.dps.clz.utils;


import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class LotteryUtil {

    /**
     * 抽奖
     *
     * @param orignalRates 原始的概率列表，保证顺序对应
     * @return 索引
     */
    public static int lottery(List<Double> orignalRates) {
        if (CollectionUtils.isEmpty(orignalRates)) {
            return 0;
        }
        // 计算总概率，这样可以保证不一定总概率是1
        double sumRate = orignalRates.stream().mapToDouble(Double::doubleValue).sum();

        // 计算每个物品在总概率的基础下的概率情况
        List<Double> sortOrignalRates = new ArrayList<Double>(orignalRates.size());
        Double tempSumRate = 0d;
        for (double rate : orignalRates) {
            tempSumRate += rate;
            sortOrignalRates.add(tempSumRate / sumRate);
        }
        // 根据区块值来获取抽取到的物品索引
        double nextDouble = Math.random();
        sortOrignalRates.add(nextDouble);
        Collections.sort(sortOrignalRates);
        return sortOrignalRates.indexOf(nextDouble);
    }
}
